﻿/**
 * @file PyFITKSEACavity.h
 * @brief  SEA声腔 为python装饰器接口准备的封装类
 * @author wangning (2185896382@qq.com)
 * @date 2024-12-03
 */
#ifndef _PY_SEA_CAVITY_H___
#define _PY_SEA_CAVITY_H___

#include "PyFITKAcousticsAbsModel.h"
#include <QString>
#include "FITK_Component/FITKAcousticsModel/FITKAbstractSEASubSysWithNodes.h"

namespace Acoustics
{
    class FITKSEASubSysCavity;

    /**
     * @brief  SEA声腔 为python装饰器接口准备的封装类
     * @author wangning (2185896382@qq.com)
     * @date 2024-12-03
     */
    class FITKAcousticsModelAPI PyFITKSEACavity : public PyFITKAcousticsAbsodel
    {
    public:
        explicit PyFITKSEACavity(const QString& name);
        explicit PyFITKSEACavity() = default;
        virtual ~PyFITKSEACavity();

        int getCavityID();
        /**
         * @brief  添加面
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        bool addShell(QString shell);
        /**
         * @brief 创建声腔
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool createCavity();
        /**
         * @brief  获取名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        QString getName();
        /**
         * @brief  设置名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        bool setName(const QString& name);
        /**
         * @brief 设置流体材料
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setFiuld(const QString& name);
        /**
         * @brief 设置阻尼,如果不输入名称，则使用噪音控制处理的吸收类型（Noise Control Treatments）
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setDamping(const QString& damping = QString());
        /**
         * @brief     判断靠近声腔的一面
         * @param[i]  name：板的名称
         * @return    0:内部声学包，1:外部声学包
         * @author    wangning (2185896382@qq.com)
         * @date      2024-11-25
         */
        int getNCT_In_or_Out(const QString& name);
        /**
         * @brief 设置 体积面积周长 重载
         * @param[i]  type：1:体积 2:面积 3:周长
         * @param[i]  is：是否启用重载
         * @param[i]  overridee：重载后的数值
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setGeometryProp(int type, bool is, double overridee);
        /**
         * @brief 设置是否启用波在SEA的解决方案
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        void setSEAMatrixSolution(bool isSolution);
        /**
         * @brief 设置模态密度
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        bool setModalDensity(bool isModalDensity, const QString& modalDensity);
        /**
         * @brief 获取体积面积周长
         * @param[i]  overridee：0获取原始周长，1获取重载周长
         * @author wangning (2185896382@qq.com)
         * @date 2024-11-25
         */
        QString getGeometryProp(int overridee);

    private:
        /**
         * @brief  从管理器中获取新名称
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-24
         */
        QString ckeckNameFromMgr(QString name);

    private:
        /**
         * @brief  板链表
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        QList<int> _shellIDList{};
        /**
         * @brief  声腔对象
         * @author wangning (2185896382@qq.com)
         * @date   2024-11-25
         */
        Acoustics::FITKSEASubSysCavity* _cavityObject{};
    };

}
#endif



